Cloud IAM
gcloud での実行例がまとまってて便利
code:create-service-account.sh
# service account を作る
$ gcloud iam service-accounts create stackdriver-trace-agent
# service account に role を付与
$ gcloud projects add-iam-policy-binding pokutuna-dev \
--member=serviceAccount:stackdriver-trace-agent@pokutuna-dev.iam.gserviceaccount.com \
--role=roles/cloudtrace.agent
# credential を作る
$ gcloud iam service-accounts keys create key.json \
--iam-account stackdriver-trace-agent@pokutuna-dev.iam.gserviceaccount.com
1回で複数の role をセットはできないみたい
--role=roles/hoge --role=roles/fuga とかやっても一方のみ付く
role はこういうページを見て探す
add-iam-policy-binding
の後ろにくる RESOURCE はサブコマンドによってかなりなんでもある、IAM ポリシーを付けられる対象
プロジェクト
$ gcloud projects add-iam-policy-binding (projectId)
Cloud Functions
$ gcloud functions add-iam-policy-binding (functionName)
Service Account の公開鍵
Google は、すべてのサービス アカウントのすべての公開鍵に誰でもアクセスできるようにしており、秘密鍵を使って作成された署名の検証に公開鍵を使用できます。公開鍵は次の URL で公開されています。
すばらしいな
Cusotm Role
複数の Permission を指定してオリジナルの Role を作ろう! という機能だけど
意外と Custom Role に対応してない Permission が多く微妙である。
このツールにはこの Permissions が必要ですよ、この yaml で Custom Role を作れますよ、となるとうれしいのだが意外とサポートされてない権限が多い、Datastore は結構だめ
数字で作成されるサービスアカウント
例えば
xxxxxx@cloudbuild.gserviceaccount.com CloudBuild
xxxxxx-compute@developer.gserviceaccount.com ComputeEngine
xxxxxx@cloudservices.gserviceaccount.com GoogleAPI サービスエージェント
この辺の数字は Project の数字のほうのID
...そういうサービスアカウントを data.google_service_account で参照してもたぶんだめ(@より前しか入力できない)
諦めて文字列を作る ${data.google_project.hoge.number}@cloudbuild.gserviceaccount.com など
code:cloudbuild-agent.tf
locals {
cloudbuild_user_roles = toset([
"roles/cloudkms.cryptoKeyEncrypterDecrypter",
"roles/container.developer"
])
}
resource "google_project_iam_member" "roles_cloudbuild_agent" {
for_each = local.cloudbuild_user_roles
member = "serviceAccount:${data.google_project.this.number}@cloudbuild.gserviceaccount.com"
role = each.value
}
Access Scope
アクセス スコープは、インスタンスの権限を指定するレガシーな方法です。アクセス スコープはセキュリティ メカニズムではなく、gcloud ツールまたはクライアント ライブラリからのリクエストで使用されるデフォルトの OAuth スコープを定義するものです。これは、gRPC や SignBlob API など、OAuth を介して認証を受けないリクエストには影響しないことに注意してください。
従来の GCE インスタンスの権限を制限する用途?
デフォルト
https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
https://www.googleapis.com/auth/service.management.readonly
https://www.googleapis.com/auth/servicecontrol
API とりあえず叩くときに指定する https://www.googleapis.com/auth/cloud-platform は入ってない
これは全ての GCP OAuth API
変更には1度インスタンスを停止する必要がある
https://gyazo.com/e2da754b7bc1c89cc369d755fcb24013
IAM Conditions
指定された条件を満たす場合にのみプリンシパルにアクセス権を付与できる
基本ロールや allUsers には条件付与できない
サービスや特定のバケットに限る
タグでフィルタ
期限
宛先
Asset Inventory
$ gcloud asset list